package com.theorydance.esoperator.utils;

/**
 * 用于判断点是否在多边形内部
 */
public class Polygon {

	private final LngLat[] points;
	
	public Polygon(LngLat[] points) {
		this.points = points;
	}
	
	/**
	 * 用于判断点是否在多边形内部，从网上摘录下来，但是感觉这个实现有bug在里面，必要的时候，自己基于射线法重新实现里面的内容，自己实现的时候要注意判断交点是算1次还是两次问题，这个是bug的关键
	 * @param point
	 * @return true表示包含，在多边形内部，false表示没在
	 */
	public boolean contain(LngLat point) {
        boolean result =false;
        int i =0;
        for (int j =this.points.length -1; i <this.points.length; j = i++) {
            if (this.points[i].getLat() > point.getLat() !=this.points[j].getLat() > point.getLat()
                    && point.getLng() < (this.points[j].getLng() -this.points[i].getLng()) * (point.getLat() -this.points[i].getLat()) / (this.points[j].getLat() -this.points[i].getLat()) +this.points[i].getLng()) {
                result = !result;
            }
        }
        return result;
	}
	
}
